<template>
  <div class="container">
    <van-nav-bar
      title="搜索中心"
      left-arrow
      @click-left="$router.back()"
    />
    <van-search
      v-model.trim="keyWord"
      placeholder="请输入搜索关键词"
      shape="round"
      @search="onSearch"
    />
    <!-- 联想词 -->
    <van-cell-group
      class="suggest-box"
      v-if="keyWord"
    >
      <!-- span高亮联想关键词 -->
      <van-cell
        icon="search"
        v-for="(item,index) in suggestList"
        :key="index"
        @click="onSearch(item.replace(`<span>${keyWord}</span>`,keyWord))"
      >
        <p v-html="item"></p>
      </van-cell>
    </van-cell-group>
    <!-- 历史记录 -->
    <div
      class="history-box"
      v-else
    >
      <div class="head">
        <span>历史记录</span>
        <van-icon
          name="delete"
          @click="delAll"
        ></van-icon>
      </div>
      <van-cell-group>
        <van-cell
          v-for="(item,index) in historyList"
          :key="index"
        >
          <a
            class="word_btn"
            @click="onSearch(item)"
          >{{item}}</a>
          <!-- 删除单个历史记录 -->
          <van-icon
            class="close_btn"
            slot="right-icon"
            name="cross"
            @click="delHistory(index)"
          />
        </van-cell>
      </van-cell-group>
    </div>
  </div>
</template>

<script>
import { suggestAPI } from '@/api/news'
const TTSearchHistory = 'TT_Search_History'

export default {
  name: 'search-index',
  data () {
    return {
      keyWord: '', // 搜索词
      historyList: JSON.parse(localStorage.getItem(TTSearchHistory)) || [], // 历史搜索列表
      suggestList: []
    }
  },
  watch: {
    keyWord () {
      this.timer && clearTimeout(this.timer)
      this.timer = setTimeout(async () => {
        if (!this.keyWord) {
          this.suggestList = []
          return false
        }
        const { data } = await suggestAPI(this.keyWord)
        // 格式化数据：：用map方法将每项数据中包含关键词的地方全部替换为带有样式的span标签包裹
        this.suggestList = data.options.map((item) => item.toLowerCase().replace(this.keyWord, `<span>${this.keyWord}</span>`)
        )
        // console.log(this.suggestList)
      }, 600)
    }
  },
  methods: {
    onSearch (val) { // 搜索结果
      if (!this.keyWord) return this.$toast.fail('关键词不可为空')
      // includes方法 会遍历查询列表中 你传入的的元素 是否存在 如果存在就返回ture 否则false
      // 搜索重复，就不存到本地
      // 使用includes方法 传入val(input的值) 如果返回true就证明有重复的，就不存本地 故取反
      if (!this.historyList.includes(val)) {
        // 本地内存存一份
        this.historyList.unshift(val)
        // 更新一下列表
        this.updateHistoryList()
      }
      // 跳转到搜索结果的页面 将搜索的参数传也传过去
      this.$router.push({
        path: '/searchResult',
        query: {
          q: val
        }
      })
    },
    delHistory (index) { // 删除单个浏览记录
      // console.log(2)
      // 删除内存中存的
      this.historyList.splice(index, 1)
      // 更新本地存储的
      this.updateHistoryList()
    },
    delAll () { // 清空浏览记录
      this.historyList = []
      this.updateHistoryList()
    },
    updateHistoryList () { // 更新本地存贮的浏览记录
      localStorage.setItem(TTSearchHistory, JSON.stringify(this.historyList))
    }
  }
}
</script>

<style scoped lang='less'>
.suggest-box {
  /deep/ .van-cell {
    padding: 10px 20px;
    color: #999;
    p {
      span {
        color: red;
      }
    }
  }
}
.history-box {
  padding: 0 20px;
  .head {
    line-height: 36px;
    color: #999;
    text-align: left;
    .van-icon {
      font-size: 16px;
      float: right;
      margin-top: 10px;
    }
  }
  .van-cell {
    padding: 10px 0;
  }
  .word_btn {
    color: #3296fa;
  }
  .close_btn {
    margin-top: 5px;
    color: #999;
  }
}
</style>
